
Ext.namespace('AdministracionPerfiles');

AdministracionPerfiles.cantRegXpaginaAdmPerfiles = 30;

AdministracionPerfiles.CamposStore_grillaPerfiles = ['PEPE_NID',  'PEPE_NOMBRE', 'ESES_NID', 'ESES_DESCRIPCION', 'PEPE_FECHA' ]; 
	
AdministracionPerfiles.Store_grillaPerfiles = new Ext.data.JsonStore({
    id : 'AdministracionPerfiles_storeGrillaAdmPerfiles',
    name : 'AdministracionPerfiles_storeGrillaAdmPerfiles',
    root: 'data',
    totalProperty: 'totalRows',
    autoLoad: true,
    remoteSort: false,      
    baseParams: {
        accion: 'listarPerfiles',
        limit : AdministracionPerfiles.cantRegXpaginaAdmPerfiles
    },
    successProperty: 'success', 
    fields: AdministracionPerfiles.CamposStore_grillaPerfiles,
    url: 'ConeccionesAJAX/AdministracionPerfilesAJAX.' + extensionServidor, 
    listeners: {        
        
}
}); 

AdministracionPerfiles.grillaAdmPerfilesBtnAgregar = new Ext.Button({
    iconCls : 'btnPerfilAgregar',
    id : 'AdministracionPerfiles_btnAgregar',
    name : 'AdministracionPerfiles_btnAgregar',
    text : 'Agregar',
    handler : function() {
        AdministracionPerfiles.fncCreaVentanaAgregarPerfil('NEW');
    } 
});

AdministracionPerfiles.rowSelectionModelGrillaAdmPerfiles = new Ext.grid.RowSelectionModel(
{
    singleSelect : false,
    listeners : {
        rowselect : function(sm, row, rec) {
            AdministracionPerfiles.rowSelectionModelGrillaAdmPerfiles.row = row;
            AdministracionPerfiles.rowSelectionModelGrillaAdmPerfiles.record = rec;                                    
        }
    }
});


AdministracionPerfiles.columnasGrillaAdmPerfiles = new Ext.grid.ColumnModel([
    new Ext.grid.RowNumberer(), {

        id: 'PEPE_NID',
        dataIndex: 'PEPE_NID',
        header: '',        
        hidden:true,
        hideable: false,
        width: 20
    },{

        id: 'PEPE_NOMBRE',
        dataIndex: 'PEPE_NOMBRE',
        header: 'Nombre del perfil',
        sortable: true,
        hideable: false,
        width: 200
    },
    {
        id: 'ESES_DESCRIPCION',
        dataIndex: 'ESES_DESCRIPCION',
        header: 'Vigencia',
        sortable: true,
        width: 100,
        falseText: 'No',
        trueText: 'Si'
    },
    {
        id: 'PEPE_FECHA',
        dataIndex: 'PEPE_FECHA',
        header: 'Creación',
        sortable: true,
        width: 90,
        falseText: 'No',
        trueText: 'Si'
    },
    {
        xtype: 'actioncolumn',
        header: 'Eliminar',
        align: 'center',
        sortable: false,
        hideable: false,
        menuDisabled : true,
        width: 75,
        items: [{
            icon: '../img/icons/botones/perfilBorrar.ico',  // Use a URL in the icon config
            tooltip: 'Eliminar perfil',
            handler: function(grid, rowIndex, colIndex) {
                grid.getSelectionModel().selectRow(rowIndex);
                var nombre_perfil = AdministracionPerfiles.rowSelectionModelGrillaAdmPerfiles.record.data.PEPE_NOMBRE;
                Ext.MessageBox.confirm('Confirme','¿Esta seguro que desea eliminar el perfil "'+ nombre_perfil + '"?',
                    function(btn){
                        if (btn == 'yes') {
                            AdministracionPerfiles.fncEliminarPerfil();
                        }
                    });
            }
        }]


    }
    ]);

AdministracionPerfiles.grillaAdmPerfiles = new Ext.grid.GridPanel({
    iconCls: 'winPerfil',
    id: 'AdministracionPerfiles_grillaAdmPerfiles',
    anchor: '100% 100%',
    store: AdministracionPerfiles.Store_grillaPerfiles,
    cm: AdministracionPerfiles.columnasGrillaAdmPerfiles,
    title: 'Administración de Perfiles',
    stripeRows : true,    
    autoScroll : true,
    loadMask : true,
    columnLines: true,   
    bbar : new Ext.PagingToolbar({
        pageSize : AdministracionPerfiles.cantRegXpaginaAdmPerfiles,
        store : AdministracionPerfiles.Store_grillaPerfiles,
        displayInfo : true,
        displayMsg : 'INFO: Para editar haga Doble Click. Listando perfiles {0} - {1} de {2}',
        emptyMsg : "No se encontraron Perfiles."
    }),
    tbar: [AdministracionPerfiles.grillaAdmPerfilesBtnAgregar],
    sm: AdministracionPerfiles.rowSelectionModelGrillaAdmPerfiles
});

AdministracionPerfiles.grillaAdmPerfiles.on('rowdblClick',function(){
    if (AdministracionPerfiles.grillaAdmPerfiles.getSelectionModel().getSelected() != undefined){
        AdministracionPerfiles.fncCreaVentanaAgregarPerfil('EDIT');        
    }
});


AdministracionPerfiles.fncCargarAccesos = function(p_str_modo) {
    var p_int_nid_perfil;
    if (p_str_modo == 'EDIT') {
        p_int_nid_perfil =  AdministracionPerfiles.rowSelectionModelGrillaAdmPerfiles.record.data.PEPE_NID;
    }
    if (p_str_modo == 'NEW') {
        p_int_nid_perfil =  0;
    }
    
    AdministracionPerfiles.fncCargarAccesos.tree = new Ext.tree.TreePanel({
        loader: new Ext.tree.CustomUITreeLoader({
            dataUrl:'../Administracion/ConeccionesAJAX/AdministracionPerfilesAJAX.aspx?go=listarMenuPrincipalCheckbox&pepenid=' + p_int_nid_perfil,
            baseAttr: {
                uiProvider: Ext.tree.CheckboxNodeUI
            },
            listeners: {
                load: function(loader, node, response) {
                    if (response.responseText != 'nosession') {
                        AdministracionPerfiles.obj = Ext.util.JSON.decode(response.responseText);
                        Ext.MessageBox.hide();
                        if (AdministracionPerfiles.obj.errors) {
                            Ext.MessageBox.show({
                                title : 'Error',
                                msg : AdministracionPerfiles.obj.errors.desc,
                                buttons : Ext.Msg.OK,
                                icon : Ext.MessageBox.ERROR,
                                fn : function() {
                                    AdministracionPerfiles.fncCreaVentanaAgregarPerfil.Ventana.destroy();
                                }
                            });
                        }
                    }
                }
            }
            
        }),
        animate:true,
        enableDD:true,
        containerScroll: true,
        autoScroll:true,
        useArrows : true,
        rootUIProvider: Ext.tree.CheckboxNodeUI,
        selModel: new Ext.tree.CheckNodeMultiSelectionModel(),
        rootVisible:true
    });

    root = new Ext.tree.AsyncTreeNode({
        text: 'Menu de Sistema',
        draggable:false,
        id: 'root',        
        uiProvider: Ext.tree.CheckboxNodeUI
    });

    AdministracionPerfiles.fncCargarAccesos.tree.setRootNode(root);
    
    
    AdministracionPerfiles.fncCargarAccesos.tree.root.expand(false, false, function() {
        if (AdministracionPerfiles.fncCargarAccesos.tree.root.firstChild) {
            AdministracionPerfiles.fncCargarAccesos.tree.root.firstChild.expand(true);      
        }
    });
    
    
    AdministracionPerfiles.fncCargarAccesos.fieldSet_AccesosPerfil = new Ext.form.FieldSet ({          
        height:350,          
        bodyStyle: 'padding: 0px 0px 0px 0px',
        title: 'Accesos', 
        collapsible : false,        
        monitorValid : true,
        autoScroll:true,
        items: [AdministracionPerfiles.fncCargarAccesos.tree]
        
    });
    
    return AdministracionPerfiles.fncCargarAccesos.fieldSet_AccesosPerfil;
}

AdministracionPerfiles.fncCreaVentanaAgregarPerfil = function(p_str_modo){
    
    AdministracionPerfiles.fncCreaVentanaAgregarPerfil.CamposStore_drpVigenciaPerfil = ['ESES_NID','ESES_DESCRIPCION']; 
   
	
    AdministracionPerfiles.fncCreaVentanaAgregarPerfil.Store_drpVigenciaPerfil = new Ext.data.JsonStore({
        root: 'data',        
        autoLoad: false,
        remoteSort: false,
        mode: 'remote',        
        baseParams: {
            accion: 'listarVigenciaPerfil'
        },
        successProperty: 'success',
        fields: AdministracionPerfiles.fncCreaVentanaAgregarPerfil.CamposStore_drpVigenciaPerfil,
        url: 'ConeccionesAJAX/AdministracionPerfilesAJAX.' + extensionServidor,
        listeners: {
            loadexception: function(algoRaro, json){
                if (json.reader.jsonData.errors.id){
                    Ext.MessageBox.show({
                        title: 'INFORMACION',
                        msg: json.reader.jsonData.errors.desc,
                        buttons: Ext.Msg.OK,
                        icon: Ext.MessageBox.INFO
                    });
                }
            }
        }
    });
    
    AdministracionPerfiles.fncCreaVentanaAgregarPerfil.btn_Guardar = new Ext.Button({
        iconCls : 'btnGuardar',
        id : 'AdministracionPerfiles_fncCreaVentanaAgregarPerfil_btn_Guardar',
        name : 'AdministracionPerfiles_fncCreaVentanaAgregarPerfil_btn_Guardar',
        text : 'Guardar',
        formBind : true,
        handler : function() {
            var tree = AdministracionPerfiles.fncCargarAccesos.tree;
            var z  = tree.getChecked();
            var y = z.slice(1,z.length);
            
            if (y.length >= 2) {
                var x = ValidaSesionAjax();
                AdministracionPerfiles.fncGrabaDatosPerfil(y.toString(), p_str_modo);                
                
            } else {
                Ext.MessageBox.show({
                    title : 'ALERTA',
                    msg : 'Debe seleccionar a lo menos un sub-item en accesos',
                    buttons : Ext.Msg.OK,
                    icon : Ext.MessageBox.INFO
                });
            }
            
        }
    });
    
    AdministracionPerfiles.fncCreaVentanaAgregarPerfil.txt_NombrePerfil = comunes.crear_text_formulario('AdministracionPerfiles_fncCreaVentanaAgregarPerfil_txt_NombrePerfil', 'Nombre Perfil', 30, 0, 50, true, false, false, '', '', 'AdministracionPerfiles_fncCreaVentanaAgregarPerfil_drp_VigenciaPerfil','CajaMayus');    
    AdministracionPerfiles.fncCreaVentanaAgregarPerfil.txt_NombrePerfil.setValue('');
    //AdministracionPerfiles.fncCreaVentanaAgregarPerfil.txt_NombrePerfil.setlabelWidth = 200;    
    AdministracionPerfiles.fncCreaVentanaAgregarPerfil.drp_VigenciaPerfil = comunes.crear_combobox_formulario('AdministracionPerfiles_fncCreaVentanaAgregarPerfil_drp_VigenciaPerfil', 'Vigencia', 30, true, false, false, '', '', AdministracionPerfiles.fncCreaVentanaAgregarPerfil.Store_drpVigenciaPerfil, 'remote', 'Seleccione...', '');
    
    
    AdministracionPerfiles.fncCreaVentanaAgregarPerfil.fieldSet_DatosPerfil = new Ext.form.FieldSet ({                    
        height: 350,
        layout: {
            defaultAnchor: '',
            type: 'form'
        },
        bodyStyle: 'padding: 0px 0px 0px 0px',        
        title: 'Datos del Perfil',
        collapsible : false,
        
        monitorValid : true,        
        items:[AdministracionPerfiles.fncCreaVentanaAgregarPerfil.txt_NombrePerfil,AdministracionPerfiles.fncCreaVentanaAgregarPerfil.drp_VigenciaPerfil]
    });
    
    AdministracionPerfiles.fncCreaVentanaAgregarPerfil.chk_Accesos = comunes.crear_check_formulario('AdministracionPerfiles_fncCreaVentanaAgregarPerfil_chk_Accesos', 'Accesos', false, 1, 50, '', '', true)
    
    AdministracionPerfiles.fncCreaVentanaAgregarPerfil.retAccesos = AdministracionPerfiles.fncCargarAccesos(p_str_modo);
    
    AdministracionPerfiles.fncCreaVentanaAgregarPerfil.Formulario = new Ext.FormPanel(
    {
        id : 'AdministracionPerfiles_fncCreaVentanaAgregarPerfil_Formulario',
        name : 'AdministracionPerfiles_fncCreaVentanaAgregarPerfil_Formulario',
        labelAlign : 'left',
        frame : true,
        defaults : {
            bodyStyle : 'padding: 0px 5px 0px 0px'
        },
        monitorValid : true,
        autoHeight : true,
        autoDestroy : true,
        autoScroll : true,
        columnWidth : 0.2,
        layout : 'column',        
        items : [{
            labelWidth : 80,
            columnWidth : .60,
            layout : 'form',
            items :[AdministracionPerfiles.fncCreaVentanaAgregarPerfil.fieldSet_DatosPerfil]
        },{
            labelWidth : 60,
            columnWidth : .40,
            layout : 'form',
            items :[AdministracionPerfiles.fncCreaVentanaAgregarPerfil.retAccesos]
        }],
       
        buttons : [AdministracionPerfiles.fncCreaVentanaAgregarPerfil.btn_Guardar],
        buttonAlign: 'center'
    });
    
    
    
    AdministracionPerfiles.fncCreaVentanaAgregarPerfil.Ventana = new Ext.Window({
        iconCls: 'winPerfil',
        autoHeight : true,
        width: 750,
        activeItem: 0,
        bodyStyle: 'padding: 5px 5px 5px 5px',
        frame: true,
        resizable: false,
        modal: true,
        autoDestroy :true,        
        title: '',
        items: [AdministracionPerfiles.fncCreaVentanaAgregarPerfil.Formulario],
        constrainHeader: true
    });
    
    
    
    if (p_str_modo=='EDIT'){        
        var process = new Ext.ProgressBar({
            text : 'Recuperando datos...'
        });

        var winProcess = new Ext.Window({
            closable : false,
            collapsible : false,
            draggable : false,
            resizable : false,
            layout : 'fit',
            width : 200,
            height : 40,
            plain : true,
            modal : true,
            items : process
        });
        winProcess.show();
        Runner.run(process, 4, function() {
            process.updateText('Recuperando');
        });
        Ext.Ajax.timeout = 90000000;
        
        AdministracionPerfiles.fncCreaVentanaAgregarPerfil.Store_drpVigenciaPerfil.loadData({
            data : [{
                ESES_NID : AdministracionPerfiles.rowSelectionModelGrillaAdmPerfiles.record.data.ESES_NID,
                ESES_DESCRIPCION : AdministracionPerfiles.rowSelectionModelGrillaAdmPerfiles.record.data.ESES_DESCRIPCION
            }]
        });
        
      
                 
        AdministracionPerfiles.fncCreaVentanaAgregarPerfil.txt_NombrePerfil.setValue(AdministracionPerfiles.rowSelectionModelGrillaAdmPerfiles.record.data.PEPE_NOMBRE);        
        AdministracionPerfiles.fncCreaVentanaAgregarPerfil.drp_VigenciaPerfil.setValue(AdministracionPerfiles.fncCreaVentanaAgregarPerfil.Store_drpVigenciaPerfil.data.items[0].data.ESES_NID);        
        
        AdministracionPerfiles.fncCreaVentanaAgregarPerfil.idPerfil = AdministracionPerfiles.rowSelectionModelGrillaAdmPerfiles.record.data.PEPE_NID;
        
        AdministracionPerfiles.fncCreaVentanaAgregarPerfil.Ventana.setTitle('Editar Perfil');
        AdministracionPerfiles.fncCreaVentanaAgregarPerfil.Ventana.show();
        winProcess.hide();
     
    }
    
    if (p_str_modo=='NEW'){        
        var process = new Ext.ProgressBar({
            text : 'Recuperando datos...'
        });

        var winProcess = new Ext.Window({
            closable : false,
            collapsible : false,
            draggable : false,
            resizable : false,
            layout : 'fit',
            width : 200,
            height : 40,
            plain : true,
            modal : true,
            items : process
        });
        winProcess.show();
        Runner.run(process, 4, function() {
            process.updateText('Recuperando');
        });
        Ext.Ajax.timeout = 90000000;
        
        AdministracionPerfiles.fncCreaVentanaAgregarPerfil.idPerfil = 0;
        AdministracionPerfiles.fncCreaVentanaAgregarPerfil.Ventana.setTitle('Agregar Perfil');
        AdministracionPerfiles.fncCreaVentanaAgregarPerfil.Ventana.show();
        winProcess.hide();
    }    
}



AdministracionPerfiles.fncGrabaDatosPerfil = function(p_arr_accmenu, p_str_modo) {
    Ext.Ajax.timeout = 90000000;
    Ext.MessageBox.wait('Grabando... Por favor espere...');   
    
    Ext.Ajax.request({
        url : 'ConeccionesAJAX/AdministracionPerfilesAJAX.' + extensionServidor,
        params : {
            accion : 'guardarNuevoPerfil',
            p_int_nid_perfil: AdministracionPerfiles.fncCreaVentanaAgregarPerfil.idPerfil,
            p_str_nombre : AdministracionPerfiles.fncCreaVentanaAgregarPerfil.txt_NombrePerfil.getValue(),
            p_int_nid_estado : AdministracionPerfiles.fncCreaVentanaAgregarPerfil.drp_VigenciaPerfil.getValue(),
            p_arr_accmenu: p_arr_accmenu
        },
        method : 'POST',
        success : function(action) {
            if (action.responseText != 'nosession') {                
                AdministracionPerfiles.obj = Ext.util.JSON.decode(action.responseText);                                                               
                Ext.MessageBox.hide();
                if (AdministracionPerfiles.obj.success){
                    Ext.MessageBox.show({
                        title : 'Información',
                        msg : AdministracionPerfiles.obj.created[0].GLS_ERROR,
                        buttons : Ext.Msg.OK,
                        icon : Ext.MessageBox.INFO,
                        fn: function(){
                            AdministracionPerfiles.fncCreaVentanaAgregarPerfil.Ventana.destroy();
                            AdministracionPerfiles.Store_grillaPerfiles.reload();
                        }
                    });
                }
                else{
                    Ext.MessageBox.show({
                        title : 'Error',
                        msg : AdministracionPerfiles.obj.errors.desc,
                        buttons : Ext.Msg.OK,
                        icon : Ext.MessageBox.ERROR,
                        fn: function(){
                            AdministracionPerfiles.fncCreaVentanaAgregarPerfil.Ventana.destroy();
                            AdministracionPerfiles.Store_grillaPerfiles.reload();
                        }
                    });
                }
            }
        },
        failure : function(resp, opt) {
            Ext.MessageBox.hide();
            Ext.MessageBox.show({
                title : 'ERROR',
                msg : 'No se pudo establecer comunicacion con el servidor.',
                buttons : Ext.Msg.OK,
                icon : Ext.MessageBox.ERROR
            });
        }
    });
}

AdministracionPerfiles.fncEliminarPerfil = function() {
    Ext.Ajax.timeout = 90000000;
    Ext.MessageBox.wait('Eliminando... Por favor espere...');   
    Ext.Ajax.request({
        url : 'ConeccionesAJAX/AdministracionPerfilesAJAX.' + extensionServidor,
        params : {
            accion : 'eliminarPerfil',
            p_int_nid_perfil: AdministracionPerfiles.rowSelectionModelGrillaAdmPerfiles.record.data.PEPE_NID
        },
        method : 'POST',
        success : function(action) {  
            if (action.responseText != 'nosession') {                
                AdministracionPerfiles.obj = Ext.util.JSON.decode(action.responseText);               
                Ext.MessageBox.hide();
                if (AdministracionPerfiles.obj.success){
                    Ext.MessageBox.show({
                        title : 'Información',
                        msg : AdministracionPerfiles.obj.created[0].GLS_ERROR,
                        buttons : Ext.Msg.OK,
                        icon : Ext.MessageBox.INFO,
                        fn: function(){
                            if (AdministracionPerfiles.obj.created[0].NUM_ERROR == 0) {
                                AdministracionPerfiles.Store_grillaPerfiles.reload();
                            }
                        }
                    });
                }
                else{
                    Ext.MessageBox.show({
                        title : 'Error',
                        msg : AdministracionPerfiles.obj.errors.desc,
                        buttons : Ext.Msg.OK,
                        icon : Ext.MessageBox.ERROR
                    });
                }
                
            }   
        },
        failure : function(response, options) {
            Ext.MessageBox.hide();
            Ext.MessageBox.show({
                title : 'ERROR',
                msg : 'No se pudo establecer comunicacion con el servidor.',
                buttons : Ext.Msg.OK,
                icon : Ext.MessageBox.ERROR
            });
        }
          
    });
}

var Runner = function() {
    var f = function(v, pbar, count, cb) {
        return function() {
            // give this one a different count style for fun
            var i = v / count;
            pbar.updateProgress(i, Math.round(100 * i) + '% completado...');
        };
    };
    return {
        run : function(pbar, count, cb) {
            var ms = 500 / count;
            for (var i = 1; i <= count; i++) {
                setTimeout(f(i, pbar, count, cb), i * ms);
            }
        }
    };
}();
